package com.omni.monitor.model.trace_monitor;

import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

// 调用链节点模型
@Data
public abstract class TraceNode {
    /**
     * 全局唯一traceId
     */
    private String traceId;
    /**
     * 当前节点路径
     */
    private String path;

    /**
     * 当前节点spanId
     */
    private String spanId;

    /**
     * 父节点spanId
     */
    private String parentSpanId;

    /**
     * 当前线程名称
     */
    private String threadName;
    /**
     * 调用深度
     */
    private int depth;

    /**
     * 开始时间戳(ms)
     */
    private long startTime;

    /**
     * 结束时间戳(ms)
     */
    private long endTime;
    /**
     * 执行耗时(ms)
     */
    private long costTime;
    /**
     * 服务类名
     */
    private String serviceName;

    /**
     * 方法名
     */
    private String methodName;
    /**
     * SQL ID (Mapper全路径+方法名)
     */
    private String sqlId;

    /**
     * 原始SQL(带?占位符)
     */
    private String originalSql;

    /**
     * 替换参数后的完整SQL
     */
    private String fullSql;
    /**
     * 执行结果(true:成功 false:失败)
     */
    private boolean success = true;
    /**
     * 参数列表
     */
    private List<TraceNodeParam> parameters = new ArrayList<>();

    // 子节点列表（用于构建树形结构）
    private List<TraceNode> children = Collections.synchronizedList(new ArrayList<>());
}
